我們從前端拿到token, 之後接下來我們要把資料傳到stripe. 然後資料成功後再把order 存在我們的order table 裡面.
以下就是前端傳的token
npm install stripe --save
然後在我們門的controller(index.js-連結) POST Request. 我們先看stripe的範例. 連結
var stripe = require("stripe")(
"sk_test_BQokikJOvBiI2HlWgH4olfQ2"
);
stripe.charges.create({
amount: 2000,
currency: "usd",
source: "tok_mastercard", // obtained with Stripe.js
description: "Charge for andrew.thompson@example.com"
}, function(err, charge) {
// asynchronously called
});
Amount 的資料就是我們要收多少錢. Source 的資料就是我們從part I 拿到的token. 其他的資料都是從request或session 裡面取得的.
// Post Checkout Page
router.post('/checkout', function(req, res, next) {
if (!req.session.cart) {
return res.render('shop/shopping-cart')
}
var cart = new Cart(req.session.cart)
//注意這邊
var stripe = require("stripe")(
"sk_test_UawoxUENSN7VkeeMIVKgmHMZ"
);
stripe.charges.create({
amount: cart.totalPrice * 100, // stripe 是以毛(cent)為單位 所以要 * 100
currency: "usd",
source: req.body.stripeToken, // 從我們的request form 拿到
description: "Test Charge"
}, function(err, charge) {
if (err) {
req.flash('error', err.messages)
return res.redirect('/checkout')
}
var order = new Order({
name: req.body.name,
address: req.body.address,
cart: cart,
paymentId: charge.id
})
order.save(function(err, result){
req.flash('success', 'Successfully bought product')
req.session.cart = null
res.redirect('/')
})
});
})
如果有error的話, 我們回到checkout, 然後傳錯誤訊息. 如果沒有錯的話, 我們在Order 裡面存檔.